package org.ix.dynamicapis.service;

import org.ix.dynamicapis.model.PageList;
import org.ix.dynamicapis.model.request.ApiSystemAddRequest;
import org.ix.dynamicapis.model.request.ApiSystemPatchRequest;
import org.ix.dynamicapis.model.request.ApiSystemQueryRequest;
import org.ix.dynamicapis.model.request.ApiSystemSaveRequest;
import org.ix.dynamicapis.model.response.ApiSystemDetailResponse;
import org.ix.dynamicapis.model.response.ApiSystemListItemResponse;

import java.util.Collection;
import java.util.List;

/**
 * 接口业务系统业务逻辑
 *
 * @author 郗世豪（rarexixi@gmail.com）
 */
public interface ApiSystemService {

    /**
     * 添加接口业务系统
     *
     * @param addRequest 接口业务系统
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiSystemDetailResponse add(ApiSystemAddRequest addRequest);

    /**
     * 批量添加接口业务系统
     *
     * @param list 接口业务系统列表
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int batchAdd(Collection<ApiSystemAddRequest> list);

    /**
     * 删除接口业务系统
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int delete(ApiSystemPatchRequest patchRequest);

    /**
     * 禁用接口业务系统
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int disable(ApiSystemPatchRequest patchRequest);

    /**
     * 启用接口业务系统
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int enable(ApiSystemPatchRequest patchRequest);

    /**
     * 根据接口ID更新接口业务系统
     *
     * @param saveRequest 保存接口业务系统请求实体
     * @return 更新后的接口业务系统详情
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiSystemDetailResponse updateById(ApiSystemSaveRequest saveRequest);

    /**
     * 根据接口ID获取接口业务系统详情
     *
     * @param id 接口ID
     * @return 接口业务系统详情
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiSystemDetailResponse getById(Integer id);

    /**
     * 获取接口业务系统列表
     *
     * @param queryRequest 搜索条件
     * @return 符合条件的接口业务系统列表
     */
    List<ApiSystemListItemResponse> getList(ApiSystemQueryRequest queryRequest);

    /**
     * 分页获取接口业务系统列表
     *
     * @param queryRequest 搜索条件
     * @param pageNum      页码
     * @param pageSize     分页大小
     * @return 符合条件的接口业务系统分页列表
     */
    PageList<ApiSystemListItemResponse> getPageList(ApiSystemQueryRequest queryRequest, Integer pageNum, Integer pageSize);
}
